/*
 * This file is part of JSTUN. 
 * 
 * Copyright (c) 2005 Thomas King <king@t-king.de> - All rights
 * reserved.
 * 
 * This software is licensed under either the GNU Public License (GPL),
 * or the Apache 2.0 license. Copies of both license agreements are
 * included in this distribution.
 */

package com.jstun.core.attribute;

import com.jstun.core.util.Utility;
import com.jstun.core.util.UtilityException;

/**
 * 패스워드 byte 생성 및 파싱 클래스
 */
public class Password extends MessageAttribute {
	String password;	// 패스워드
	
	/**
	 * default 패스워드 생성자
	 */
	public Password() {
		super(MessageAttribute.MessageAttributeType.Password);
	}
	
	/**
	 * 인자로 password값을 받는
	 * 패스워드 생성자
	 */
	public Password(String password) {
		super(MessageAttribute.MessageAttributeType.Password);
		setPassword(password);
	}
	
	/**
	 * 패스워드 반환
	 * @return
	 */
	public String getPassword() {
		return password;
	}
	
	/**
	 * 패스워드 설정
	 * @param password
	 */
	public void setPassword(String password) {
		this.password = password;
	}
	
	/**
	 * 메시지속성헤더 타입 및
	 * 패스워드를 byte로 변화 후
	 * byte[] 배열에 담아 반환
	 */
	public byte[] getBytes() throws UtilityException {
		int length = password.length();
		// password header 길이 조정
		if ((length % 4) != 0) {
			length += 4 - (length % 4);
		}
		
		length += 4;
		byte[] result = new byte[length];
		// MessageAttributeHeader type 설정
		System.arraycopy(Utility.integerToTwoBytes(typeToInteger(type)), 0, result, 0, 2);
		// length 설정
		System.arraycopy(Utility.integerToTwoBytes(length - 4), 0, result, 2, 2);
		
		// Password header 설정
		byte[] temp = password.getBytes();
		System.arraycopy(temp, 0, result, 4, temp.length);
		return result;
	}
	
	/**
	 * 인자로 byte[] data를 받아
	 * 패스워드 추출 및 설정 후 
	 * Password 객체 반환
	 * @param data
	 * @return
	 */
	public static Password parse(byte[] data) {
		Password result = new Password();
		String password = new String(data);
		result.setPassword(password);
		return result;
	}
}
